﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace DataMining
{
    /// <summary>
    /// Classe que representar?a arvore de decis鉶 montada;
    /// </summary>
    public class DTreeNode
    {
        private ArrayList mChilds = null;
        private Attribute mAttribute;

        /// <summary>
        /// Inicializa uma nova inst鈔cia de TreeNode
        /// </summary>
        /// <param name="attribute">Atributo ao qual o node est?ligado</param>
        public DTreeNode(Attribute attribute)
        {
            if (attribute.values != null)
            {
                mChilds = new ArrayList(attribute.values.Length);
                for (int i = 0; i < attribute.values.Length; i++)
                    mChilds.Add(null);
            }
            else
            {
                mChilds = new ArrayList(1);
                mChilds.Add(null);
            }
            mAttribute = attribute;
        }

        /// <summary>
        /// Adiciona um TreeNode filho a este treenode no galho de nome indicicado pelo ValueName
        /// </summary>
        /// <param name="treeNode">TreeNode filho a ser adicionado</param>
        /// <param name="ValueName">Nome do galho onde o treeNode ?criado</param>
        public void AddTreeNode(DTreeNode treeNode, string ValueName)
        {
            int index = mAttribute.indexValue(ValueName);
            mChilds[index] = treeNode;
        }

        /// <summary>
        /// Retorna o nro total de filhos do n?
        /// </summary>
        public int totalChilds
        {
            get
            {
                return mChilds.Count;
            }
        }

        /// <summary>
        /// Retorna o n?filho de um n?
        /// </summary>
        /// <param name="index">Indice do n?filho</param>
        /// <returns>Um objeto da classe TreeNode representando o n?/returns>
        public DTreeNode getChild(int index)
        {
            return (DTreeNode)mChilds[index];
        }

        /// <summary>
        /// Atributo que est?conectado ao N?
        /// </summary>
        public Attribute attribute
        {
            get
            {
                return mAttribute;
            }
        }

        /// <summary>
        /// Retorna o filho de um n?pelo nome do galho que leva at?ele
        /// </summary>
        /// <param name="branchName">Nome do galho</param>
        /// <returns>O n?/returns>
        public DTreeNode getChildByBranchName(string branchName)
        {
            int index = mAttribute.indexValue(branchName);
            return (DTreeNode)mChilds[index];
        }
    }
}
